# 浅拷贝和深拷贝
# 浅拷贝
list1 = [1, 2, [3, 4]]
# 使用赋值进行复制，内存地址完全一样
list2 = list1
print(id(list1))  # 输出 1817744707008
print(id(list2))  # 输出 1817744707008
# 使用copy进行拷贝，内存地址不一样，但是其中元素内存地址相同
list3 = list1.copy()
print(id(list1))  # 输出 1817744707008
print(id(list3))  # 输出 1817744608384
print(id(list1[0]))  # 输出 1817740443888
print(id(list3[0]))  # 输出 1817740443888
# 修改不可变类型元素，浅拷贝列表不受影响
list1[0] = 5
print(list1)  # 输出 [5, 2, [3, 4]]
print(list3)  # 输出 [1, 2, [3, 4]]
# 修改可变类型元素，浅拷贝列表会受影响
list1[2][0] = 6
print(list1)  # 输出 [5, 2, [6, 4]]
print(list3)  # 输出 [1, 2, [6, 4]]

# 深拷贝
# 引入深拷贝包
import copy

list4 = copy.deepcopy(list1)
# 深拷贝 两个list的id不同，元素中的可变类型id也不同，任意列表修改其中元素，其他深拷贝列表都不受影响
print(id(list1))  # 输出 2028202553344
print(id(list4))  # 输出 2028206165184
print(id(list1[2]))  # 输出 2028202553344
print(id(list4[2]))  # 输出 2028203144384
